package com.baizhi.common.result;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author LZM
 * @version 1.0
 * @Date 2021/12/21
 * @Description 返回的结果
 */
@Data
public class R {
    /**响应码*/
    private Integer code;
    
    /**响应消息*/
    private String msg;

    /**响应数据*/
    private Map<String, Object> data = new HashMap();

    /**响应状态*/
    private String status;

    /**
     * 功能：防止实例化
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 11:23
    */
//    private R() {}

    /**
     * 功能： 返回响应成功后的结果
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 11:40
    */
    public static R ok() {
        R r = new R();
        r.setCode(ResponseEnum.SUCCESS.getCode());
        r.setMsg(ResponseEnum.SUCCESS.getMsg());
        r.setStatus("success");
        return r;
    }

    /**
     * 功能： 返回响应失败后的结果
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 11:40
     */
    public static R error() {
        R r = new R();
        r.setCode(ResponseEnum.ERROR.getCode());
        r.setMsg(ResponseEnum.ERROR.getMsg());
        r.setStatus("fail");
        return r;
    }

    /**
     * 功能：设置特定的返回结果
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 11:46
    */
    public static R setResult(ResponseEnum responseEnum) {
        R r = new R();
        r.setCode(responseEnum.getCode());
        r.setMsg(responseEnum.getMsg());
        return r;

    }

    public R data(String key, Object value) {
        this.data.put(key, value);
        return this;
    }

    /**
     * 功能：设置特定的响应消息
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 14:17
    */
    public R msg(String msg) {
        this.setMsg(msg);
        return this;
    }

    /**
     * 功能：设置特定的响应状态
     * @param status
     * @return R
     * @author lzm
     * @date 2021/12/21 14:17
     */
    public R status(String status) {
        this.setStatus(status);
        return this;
    }

    /**
     * 功能：设置特定的响应码
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 14:17
     */
    public R code(Integer code) {
        this.setCode(code);
        return this;
    }

    /**
     * 功能：将map塞入data
     * @param
     * @return
     * @author lzm
     * @date 2021/12/21 14:21
    */
    public R data(Map<String, Object> map) {
        this.setData(map);
        return this;
    }
    
}
